home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 5 / The 640 Meg Shareware Studio CD-ROM Volume V (Data Express)(1994).ISO / amiga / tempdemo.lha / ProgrammersInfo / InternodeMsgSend.mod.c < prev    next >
C/C++ Source or Header  |  1994-05-22  |  11KB  |  411 lines

  1. /*
  2.  
  3.      [DSKEL-MSg v1.0] MS [Generic]           By The Skeleton [08-01-92]
  4.      |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
  5.      | NODE | LOGON | HANDLE                    | ACTiViTY            |
  6.      |======|=======|===========================|=====================|
  7.      |   1  | 17:45 | The Skeleton              | Downloading         |
  8.      |------|-------|---------------------------|---------------------|
  9.      |   2  | --:-- | Awaiting a call           | Idle                |
  10.      |------|-------|---------------------------|---------------------|
  11.      |   3  | --:-- | Awaiting a call           | Idle                |
  12.      |----------------------------------------------------------------|
  13.      | Select node number you want to chat with.                      |
  14.      `----------------------------------------------------------------'
  15.       [Return = Quit] Select:
  16.  
  17. */
  18. //**********************
  19. //*****  Includes  *****
  20. //**********************
  21.  
  22. #include <proto/all.h>
  23. #include <stdio.h>
  24.  
  25. #include <string.h>
  26. #include <tempest/headers.h>
  27.  
  28. //********************************
  29. //*****  Structures/Defines  *****
  30. //********************************
  31.  
  32. struct MyMessage
  33.  {
  34.   struct Message Msg;
  35.   struct User User;
  36.   char text[255],
  37.        text1[255];
  38.   int car,Value,Data;
  39.   long LongValue;
  40.   int  IntValue;
  41.  };
  42.  
  43. struct User User;
  44. struct MsgPort *MyPort = NULL;
  45. struct MyMessage *msg;
  46. struct node_info nody;
  47.  
  48. #define DROP if(EXIT_FLAG) CloseStuff();
  49.  
  50. void CloseStuff(void);
  51. void core(void);
  52. int  DOORIO(void);
  53. void Editor(char *,int);
  54. void input(char mstring[],int len);
  55. void pl(char outstring[]);
  56. void sendtext(BYTE);
  57. void WriteFile(char ostring[],char mstring[]);
  58. void ListNodes(void);
  59. int Loadnody(int node);
  60. void Activity(BYTE ,char *);
  61.  
  62. //*******************************
  63. //*****  Global Variables  ******
  64. //*******************************
  65.  
  66. int  NODE,R_NODE,NODES;
  67. int  EXIT_FLAG, DOOR_DATA, DOOR_CAR, DOOR_VALUE, DOOR_VALUE1 = 0,
  68.      Result,Error,first = 0;
  69. char MyName[255],st[100],DOOR_MSG[255],DOOR_MSG1[255],nodename[255];
  70.  
  71. //******************
  72. //*****  Main  *****
  73. //******************
  74.  
  75. void main(int argc,char *argv[])
  76. {
  77.  int stat;
  78.  if(!DoorStart(argv[1])) { PutStr("[os2] Tempest Door\n"); exit(0); }
  79.  
  80. //********************************
  81. //*****  Load Internal.Data  *****
  82. //********************************
  83.  
  84.  if((!User.NFlags1 & NF1_InternodeMsgSend)||(!User.NFlags1 & NF1_ViewNodeLists))
  85.      CloseStuff();
  86.  
  87.  Activity(31,"");
  88.  
  89.  NODE = atoi(argv[1]);
  90.  stat=Loadnody(NODE);
  91.  if(stat==0)
  92.   {
  93.    pl("NodeInfo File Not Found!\r\n");
  94.    CloseStuff();
  95.   }
  96.  NODES = nody.SystemDataInfo->NumberOfLines + 1;
  97.  core();
  98.  CloseStuff();
  99. }
  100. //******************
  101. //*****  Core  *****
  102. //******************
  103.  
  104. void core(void)
  105. {
  106.  char string[60];
  107.  register int x;
  108.  int stat;
  109.  while(1)
  110.   {
  111.    REDO:
  112.    pl("\r\n [Return=Quit] [L=List Nodes] [A=All Nodes]\r\n");
  113.    pl(" Select Node Number you want to send msg to: ");
  114.    input(string,2);
  115.    DROP;
  116.    if(string[0]==NULL) break;
  117.    string[0]=toupper(string[0]);
  118.    if((string[0]=='N')||(string[0]=='Q')) break;
  119.    R_NODE = 0;
  120.    if((string[0]=='?')||(string[0]=='L'))
  121.     {
  122.      ListNodes();
  123.      goto REDO;
  124.     }
  125.    if(string[0]=='A')
  126.     {
  127.      stat=0;
  128.      for(x=1;x<NODES;x++) if((nody.UserInfo->Name[0]!=NULL)&&(x!=NODE)) stat++;
  129.      if(stat>0)
  130.       {
  131.        sprintf(string,"node:work_ed-A",NODE);
  132.        Editor(string,100);
  133.        for(x=1;x<NODES;x++)
  134.         {
  135.          if(x != NODE)
  136.           {
  137.            stat=Loadnody(x);
  138.            if((nody.UserInfo->Name[0]!=NULL)&&(stat!=0))
  139.             {
  140.              if((*nody.AN!=58)&&(*nody.AN!=56)&&(*nody.AN!=4))
  141.               {
  142.                R_NODE = x;
  143.                if(access(string,0)==0) sendtext(1);
  144.               }
  145.             }
  146.           }
  147.         }
  148.        DeleteFile(string);
  149.       }
  150.      else pl("\r\nNobody online to send a msg to!\r\n\r\n");
  151.     }
  152.    x = atoi(string);
  153.    if((x==NODE)||(x==0)) goto REDO;
  154.    stat=Loadnody(x);
  155.    if((nody.UserInfo->Name[0]!=NULL)&&(stat!=0))
  156.     {
  157.      if(nody.UserInfo->NFlags1 & NF1_RecieveNodeMsgs)
  158.       {
  159.        if((*nody.AN!=58)&&(*nody.AN!=56)&&(*nody.AN!=4))
  160.         {
  161.          R_NODE = x;
  162.          sprintf(string,"node:work_ed-%d",NODE);
  163.          Editor(string,100);
  164.          if(access(string,0)==0)
  165.             sendtext(0);
  166.         }
  167.        else pl("\r\nYou can not send a msg to that user at this time!\r\n\r\n");
  168.       }
  169.      else pl("\r\nSorry, that user is not allowed to receive internode msgs!\r\n\r\n");
  170.     }
  171.    else pl("\r\nNobody on that node!\r\n");
  172.   }
  173. }
  174.  
  175. //************************
  176. //*****  Load Nody  ******
  177. //************************
  178.  
  179. int Loadnody(int node)
  180. {
  181.  char string[50];
  182.  register int y;
  183.  int file;
  184.  sprintf(string,"Node:NodeInfo_%d",node);
  185.  for(y=1;y<3;y++)
  186.   {
  187.    file=Open(string,MODE_OLDFILE);
  188.    if(file!=0)
  189.     {
  190.      Read(file,(char *)&nody,sizeof(struct node_info));
  191.      Close(file);
  192.      return(1);
  193.     }
  194.   }
  195.  return(0);
  196. }
  197.  
  198. //*************************
  199. //*****  List Nodes  ******
  200. //*************************
  201.  
  202. void ListNodes(void)
  203. {
  204.  char string[200],string2[20];
  205.  char Handle[40],Activity[30],Time[15];
  206.  int stat;
  207.  register int i;
  208.  
  209.  pl("\r\n[Internode Msg Sender Module v2.0]   By Michael Bockert [03-20-94]\r\n");
  210.  pl("|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\r\n");
  211.  pl("NoDE LoGoN HANDLE                    ACTiViTY            |\r\n");
  212.  
  213.  i=1;
  214.  do
  215.   {
  216.    if(CTRLC())
  217.     {
  218.      pl("Aborting Who Display!\r\n");
  219.      return;
  220.     }
  221.    stat=Loadnody(i);
  222.    if(stat==0) setmem(&nody,sizeof(struct node_info),NULL);
  223.    strcpy(Handle,nody.UserInfo->Name);
  224.    if((*nody.hide==1)&&(User.Security!=255)&&(User.Name[0]!=NULL))
  225.     {
  226.      if(nody.UserInfo->Slot_Number==1) Handle[0]=NULL;
  227.      else strcpy(Handle,"[ Hiding From Display ]");
  228.     }
  229.    if(Handle[0]!=NULL)
  230.     {
  231.      sprintf(string,"%s",ctime(&nody.UserInfo->Time_Last_Connect));
  232.      strmid(string,Time,12,5);
  233.      strcpy(Activity,nody.activity);
  234.  
  235.      sprintf(string,"NODE:CHAT-%d",i);
  236.      if(access(string,0)==0) strcpy(Activity,"Chat System");
  237.      //***************************
  238.      //*****  Final Output  ******
  239.      //***************************
  240.      pl("|------|-------|---------------------------|---------------------|\r\n");
  241. //     if(nody.NodeDataInfo->LocalMode==0)
  242.      sprintf(string2,"%2d",i);
  243. //     else                                strcpy(string2," V");
  244.      sprintf(string,"|  %2s  %5s %-25.25s %-19s |\r\n",
  245.              string2,Time,Handle,Activity);
  246.      pl(string);
  247.     }
  248.    i++;
  249.   }
  250.  while(i<NODES);
  251.  pl("`----------------------------------------------------------------'\r\n");
  252. }
  253.  
  254. //***********************
  255. //*****  Send Text  *****
  256. //***********************
  257.  
  258. void sendtext(TYPE) // 0 = single, 1 = All
  259. BYTE TYPE;
  260. {
  261.  char string[300],shit[100];
  262.  char begin[60],middle[60],end[60],send[60];
  263.  
  264.  sprintf(begin,"node:work1-%d",NODE);
  265.  if(TYPE) sprintf(middle,"node:work_ed-A",NODE);
  266.  else     sprintf(middle,"node:work_ed-%d",NODE);
  267.  sprintf(end,  "node:work2-%d",NODE);
  268.  sprintf(send, "node:MsgToNode-%d",R_NODE);
  269.  strcpy(shit,"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
  270.  
  271.  sprintf(string,"\r\n\r\nInternode Message Sent by %s on Node #%d\n%s",User.Name,NODE,shit);
  272.  WriteFile(begin,string);
  273.  
  274.  sprintf(string,"%s* END OF MSG *\n",shit);
  275.  WriteFile(end,string);
  276.  
  277.  sprintf(string,"Join >nil: %s %s %s as %s",begin,middle,end,send);
  278.  Execute(string,0L,0L);
  279.  
  280.  DeleteFile(begin);
  281.  if(!TYPE) DeleteFile(middle);
  282.  DeleteFile(end);
  283. }
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292. //*************************
  293. //*****  Close Stuff  *****
  294. //*************************
  295.  
  296. void CloseStuff(void)
  297. { DOOR_DATA=99; strcpy(DOOR_MSG,'\0'); DOORIO();
  298.  while(msg=(struct MyMessage *)GetMsg(MyPort)) ReplyMsg((struct Message *)msg);
  299.  if(MyPort) DeletePort(MyPort);
  300.  exit(0); }
  301.  
  302. //********************
  303. //*****  DoorIO  *****
  304. //********************
  305.  
  306. int DOORIO(void)
  307. {
  308.  struct MsgPort *HisPort;
  309.  struct MyMessage message;
  310.  int UPDATE;
  311.  if(EXIT_FLAG) return 0;
  312.  UPDATE=0;
  313.  HisPort = FindPort(st);
  314.  if(HisPort!=NULL)
  315.   {
  316.    message.Msg.mn_Node.ln_Type = NT_MESSAGE;
  317.    message.Msg.mn_Length = sizeof(message);
  318.    message.Msg.mn_ReplyPort = MyPort;
  319.    if(first)CopyMem(&User,&message.User,sizeof(struct User));
  320.    message.car   = 0;
  321.    message.Data  = DOOR_DATA;
  322.    message.Value = DOOR_VALUE;
  323.    message.IntValue = DOOR_VALUE1;
  324.    strcpy(message.text,DOOR_MSG);
  325.    strcpy(message.text1,DOOR_MSG1);
  326.    PutMsg((struct MsgPort *)HisPort,(struct Message *)&message);
  327.    Wait(1 << MyPort->mp_SigBit);
  328.    GetMsg(MyPort);
  329.    DOOR_DATA  = message.Data;
  330.    DOOR_VALUE = message.Value;
  331.    DOOR_VALUE1 = message.IntValue;
  332.    strcpy(DOOR_MSG,message.text);
  333.    strcpy(DOOR_MSG1,message.text1);
  334.    CopyMem(&message.User,&User,sizeof(struct User));
  335.    first=1;
  336.    UPDATE=0;
  337.    if(message.car) EXIT_FLAG=1;
  338.   }
  339.  return 0;
  340. }
  341.  
  342. //************************
  343. //*****  Door Start  *****
  344. //************************
  345.  
  346. DoorStart(char node[])
  347. {
  348.  struct MsgPort *HisPort;
  349.  EXIT_FLAG = 0;
  350.  sprintf(st,"%s:TEMPEST_DOOR",node);
  351.  HisPort = FindPort(st);
  352.  if(HisPort==NULL) return (FALSE);
  353.  sprintf(MyName,"%s:DOOR_PORT",node);
  354.  MyPort = CreatePort(MyName,0L);
  355.  if(MyPort==NULL)
  356.   {
  357.    PutStr("Cant open port");
  358.    return(int)FALSE;
  359.   }
  360.  DOORIO();
  361.  return (int)TRUE;
  362. }
  363.  
  364.  //**********************
  365.  //*****  Activity  *****
  366.  //**********************
  367.  
  368.  void Activity(BYTE act,char *text)
  369.  { DOOR_DATA=72; DOOR_VALUE=act; strcpy(DOOR_MSG,text); DOORIO(); }
  370.  
  371. //********************
  372. //*****  Editor  *****
  373. //********************
  374.  
  375. void Editor(char Filename[],int value)
  376. { DOOR_DATA=29; DOOR_VALUE=value; strcpy(DOOR_MSG,Filename); DOORIO(); }
  377.  
  378. //*******************
  379. //*****  Input  *****
  380. //*******************
  381.  
  382. void input(char mstring[],int len)
  383. { DOOR_DATA=40; DOOR_VALUE=len; strcpy(DOOR_MSG,mstring); DOORIO();
  384.  strcpy(mstring,DOOR_MSG); strcpy(DOOR_MSG,'\0'); strcpy(DOOR_MSG1,'\0'); }
  385.  
  386. //*****************************
  387. //*****  PL (Print Line)  *****
  388. //*****************************
  389.  
  390. void pl(char outstring[])
  391. { DOOR_DATA=1; strcpy(DOOR_MSG,outstring); DOORIO(); }
  392.  
  393. //************************
  394. //*****  Write File  *****
  395. //************************
  396.  
  397. void WriteFile(char ostring[],char mstring[])
  398. { DOOR_DATA=16; strcpy(DOOR_MSG,ostring); strcpy(DOOR_MSG1,mstring); DOORIO();
  399.   strcpy(DOOR_MSG,'\0'); strcpy(DOOR_MSG1,'\0'); }
  400.  
  401. //*************************
  402. //*****  CTRLC CHECK  *****
  403. //*************************
  404.  
  405. int CTRLC(void)
  406.  {
  407.   DOOR_DATA=73;
  408.   DOORIO();
  409.   return(DOOR_VALUE);
  410.  }
  411.